********************************************************************
*																	*
* 				Antwortlatenzen 2009							*
*																	*
*********************************************************************

set more off

*--------------------------------------------------------------
* Bereinigung Rohzeiten 
*-------------------------------------------------------------


sum *_rl

* Identifikation ung�ltiger Werte: Interviewervalidierung


tab pre003_t if pre003_rl==9999 //was bedeutet es, wenn Missing bei
								//Antwortzeit? Vielleicht Interviewer
								//vergessen, Taste zu dr�cken o.�.
tab pre003_rl
gen rohwbt = pre003_rl								
replace rohwbt=. if pre003_t==2 | pre003_rl==9999		
sum rohwbt pre003_rl			//1455 F�lle gehen verloren

tab pre005_rl

gen rohwabs = pre005_rl
replace rohwabs=. if pre005_t==2 | pre005_rl==9999 | pre005_rl==10000 //Wahlabsicht
sum rohwabs pre005_rl
tab rohwabs

tab pre126_rl
gen rohpid = pre126_rl
replace rohpid=. if pre126_t==2 | pre126_rl==9999		
sum pre126_rl rohpid
tab rohpid


lookfor problem

fre pre014_rl pre014_t
gen rohmip = pre014_rl/zahlerstnennung		//durch Anzahl der Antworten auf "wichtigstes politisches Problem" kontrollieren
replace rohmip = . if pre014_rl==9999 | pre014_t==2 


fre pre034_a_rl
gen rohmerkel = pre034_a_rl
replace rohmerkel = . if pre034_a_rl==9999 | pre034_a_t==2

fre pre034_b_rl
gen rohstein = pre034_b_rl
replace rohstein = . if pre034_b_rl==9999 | pre034_b_t==2


* Zeiten = 0 l�schen
foreach var of varlist roh* {
replace `var' = . if `var'==0
}


tab1 rohwbt rohwabs rohpid rohmip


*------------------------------------------------
* Basisgeschwindigkeit
*-----------------------------------------------

fre pre_dauer

* Z�hlen, wie viele Fragen es gab
/*Problem: 
Variablenanzahl ist nicht gleich Fragenanzahl.
Eine Frage kann mehrere Variablen im Datensatz haben z.B. bei Mehrachantworten. 
Andersherum gibt es nat�rlich Variablen, die auf keiner Frage beruhen.
*/

describe pre001-pre129

order pre014 pre016, last 	//String_Variablen ans Ende des Datensatzes verschieben,
							//st�ren beim Z�hlen, lieber numerisches Pendant
							//benutzen
								
								
order pre013_2-pre013_9 /// Regierungserwartung
	pre018a* pre019a* pre020a* /// Issue-Split
	pre014c2-pre014c5 ///		mehrere Nennungen bei "wichtigstes Problem"
	pre016c2-pre016c7 ///		mehrere Nennungen bei "zweitwichtigstes Problem"
	pre038_2-pre038_9 pre038m? ///
	pre042_2-pre042_9 pre042m? ///
	pre046_2-pre046_9 pre046m? ///
	pre050_2-pre050_9 pre050m? ///
	pre052_2-pre052_9 pre052m? ///
	pre054_2-pre054_9 pre054m? ///
	pre056_2-pre056_9 pre056m? ///
	pre058_2-pre058_9 ///
	pre085_2-pre085_9 pre086_2-pre086_9 ///
	pre102, last 			//hier: F�lle, in denen eine
							//Frage mehere Variablen hat, "�berfl�ssige"
							//Variablen verschieben, damit sch�n durchgez�hlt 
							//werden kann
							
describe pre001-pre129, number
return list  	//205 Variablen
				//geht leider nicht automatisiert das Z�hlen

gen quest = 205-38


* Z�hlen, wie viele Fragen ein Individueller Befragter hatte
/* Dazu z�hlen, wie oft es tnz gab */

egen tnz = anycount(pre001-pre129), values(100 101 1000 10000)		//TNZ-Codes zwar mehrere, k�nnen aber nie im Datensatz etwas anderes als tnz bedeuten
replace tnz = tnz - 6 if pre018b_a==101			//die Half-Splits rasuz�hlen
												//wenn Befragter dort Missing
												//hatte, hatte er die andere
												//Frage
fre tnz		//ganz sch�n viel

gen quest_pers = quest - tnz


* Durchschnittliche Dauer pro Frage
fre pre_dauer
hist pre_dauer if pre_dauer~=9999, percent

gen basiszeit = pre_dauer/quest_pers if pre_dauer~=9999
hist basiszeit, percent


/*Laut Methodenbericht nur vollst�ndige Interviews
im Datensatz, das hei�t keine in der Mitte abgebrochenen
Interviews sind mehr drin. Nummer Fragen also richtig 
berechnet. */


*-----------------------------------------------------
* Ausrei�erbereinigung
*--------------------------------------------------------

* Bereinigung: Ausrei�er 3 Standardabweichungen
//Ausschluss 3 Standardabweichungen �ber und unter Mean
//Wir gehen ja davon aus, dass Antwortzeiten k�rzer werden, je
//n�her Wahltag, deswegen d�rfen Mittelwerte nicht �ber gesamten
//Zeitraum berechnet werden, sondern tagesweise oder wochenweise.
//Entspreched m�ssen dann jene Personen  ausgeschlossen werden, 
//die 3 Standardabweichungen �ber und unter dem Tages- oder 
//Wochenmittelwert liegen.
//erstmal: nach Kalenderwoche (pre_woche), danach tagesweise
//pro Woche etwa 600-800 Befragte

* 1.Schritt: F�r jede Variable 2 Dummys erstellen,
* die angeben, ob eine Antwortzeit �ber oder unter 3 Standard-
* abweichungen vom Mittelwert liegt
* Strategie: sum-Befehl speichert Mittelwert und Standardabweichung
* in r-Beh�lter, auf die durch r(mean) oder r(sd) zugegriffen 
* werden kann. Zwei Schleifen: einmal f�r die Variablen und einmal
* f�r die Zeit.

tab pre_woche

* Wochenweise
foreach var of varlist roh* basiszeit {
	foreach week of numlist 31/39 {
		sum `var' if pre_woche==`week'
		gen over`var'`week' = `var'>(r(mean)+3*r(sd)) ///
			 & pre_woche==`week'
		replace over`var'`week' = . if pre_woche==`week' ///
			& `var'==.
		gen under`var'`week' = `var'<(r(mean)-3*r(sd)) ///
			& pre_woche==`week'
		replace under`var'`week' = . if pre_woche==`week' ///
			& `var'==.
	}
}


* Tagesweise

tab pre_tag

foreach var of varlist roh* basiszeit {
	forvalues day=1/60 {
		sum `var' if pre_tag==`day'
		gen over`var'd`day' = `var'>(r(mean)+3*r(sd)) ///
			 & pre_tag==`day'
		replace over`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
		gen under`var'd`day' = `var'<(r(mean)-3*r(sd)) ///
			& pre_tag==`day'
		replace under`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
	}
}


*Nachpr�fen
sum rohwbt if pre_woche==31
display r(mean)+3*r(sd)  

//alle Werte gr��er als 5.1259 Sekunden sollen raus.
						
						
list rohwbt overrohwbt31 underrohwbt31 if pre_woche==31

* evtl. sind 3 Standardabweichungen zu viel des Guten,
* Standardvorgehen: 2 Stadardabweichungen 
* Wochenweise
foreach var of varlist roh* basiszeit {
	foreach week of numlist 31/39 {
		sum `var' if pre_woche==`week'
		gen over2sd`var'`week' = `var'>(r(mean)+2*r(sd)) ///
			 & pre_woche==`week'
		replace over2sd`var'`week' = . if pre_woche==`week' ///
			& `var'==.
		gen under2sd`var'`week' = `var'<(r(mean)-2*r(sd)) ///
			& pre_woche==`week'
		replace under2sd`var'`week' = . if pre_woche==`week' ///
			& `var'==.
	}
}



* Tagesweise
foreach var of varlist roh* basiszeit {
	forvalues day=1/60 {
		sum `var' if pre_tag==`day'
		gen over2sd`var'd`day' = `var'>(r(mean)+2*r(sd)) ///
			 & pre_tag==`day'
		replace over2sd`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
		gen under2sd`var'd`day' = `var'<(r(mean)-2*r(sd)) ///
			& pre_tag==`day'
		replace under2sd`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
	}
}


* 2. Schritt: diejenigen Antwortzeiten rauswerfen, die Schwelle �ber-
* oder unterschreiten. Neue Variable bilden, damit sp�ter Zeiten ohne
* Ausrei�er und mit Ausrei�ern verglichen werden kann.

foreach var of varlist roh* basiszeit {
gen `var'_out = `var'
gen `var'_2sdout = `var' 
gen `var'_dout = `var'
gen `var'_2sddout = `var'
}

lab var rohwbt_out "Zeit Wahlbeteiligungsabsicht ohne Ausrei�er von wochenweisen Mittelwerten"
lab var rohwabs_out "Zeit Wahlabsicht ohne Ausrei�er von wochenweisen Mittelwerten"
lab var rohpid_out "Zeit PID ohne Ausrei�er von wochenweisen Mittelwerten"

lab var rohwbt_dout "Zeit Wahlbeteiligungsabsicht ohne Ausrei�er von tagesweisen Mittelwerten"
lab var rohwabs_dout "Zeit Wahlabsicht ohne Ausrei�er von tagesweisen Mittelwerten"
lab var rohpid_dout "Zeit PID ohne Ausrei�er von tagesweisen Mittelwerten"

* 3 Standardabweichungen & wochenweise
foreach var of varlist rohwbt-rohstein basiszeit {
	foreach week of numlist 31/39 {
		replace `var'_out = . if over`var'`week'==1 ///
			& pre_woche==`week'
		replace `var'_out = . if under`var'`week'==1 ///
			& pre_woche==`week'
}
}

* 2 Standardabweichungen & wochenweise
foreach var of varlist rohwbt-rohstein basiszeit {
	foreach week of numlist 31/39 {
		replace `var'_2sdout = . if over2sd`var'`week'==1 ///
			& pre_woche==`week'
		replace `var'_2sdout = . if under2sd`var'`week'==1 ///
			& pre_woche==`week'
}
}

* Tagesweise: 3 Standardabweichungen
foreach var of varlist rohwbt-rohstein basiszeit {
	forvalues day=1/60 {
		replace `var'_dout = . if over`var'd`day'==1 ///
			& pre_tag==`day'
		replace `var'_dout = . if under`var'd`day'==1 ///
			& pre_tag==`day'
}
}

* Tagesweise: 2 Standardabweichungen
foreach var of varlist rohwbt-rohstein basiszeit {
	forvalues day=1/60 {
		replace `var'_2sddout = . if over2sd`var'd`day'==1 ///
			& pre_tag==`day'
		replace `var'_2sddout = . if under2sd`var'd`day'==1 ///
			& pre_tag==`day'
}
}




sum *_out    //Fallzahlen scheinen immer noch okay zu sein
sum *_2sddout

tab rohwbt_2sddout if over2sdrohwbtd60!=1 & pre_tag==60
tab rohwbt_2sddout if over2sdrohwbtd60==1 & pre_tag==60


*-------------------------------------------------------------------
*	Residuenlatenzindex 							
*------------------------------------------------------------------

* Tages- und wochenweise
* 2 und 3 Standardabweichungen

* Wochenweise & 2 Standardabweichungen
reg rohwbt_2sdout basiszeit_2sdout [pw=wei_ipf1w]
predict latenz_wbt_2sdout, residuals

reg rohwabs_2sdout basiszeit_2sdout [pw=wei_ipf1w]
predict latenz_wabs_2sdout, residuals

reg rohpid_2sdout basiszeit_2sdout [pw=wei_ipf1w]
predict latenz_pid_2sdout, residuals

reg rohmip_2sdout basiszeit_2sdout [pw=wei_ipf1w]
predict latenz_mip_2sdout, residuals

reg rohmerkel_2sdout basiszeit_2sdout [pw=wei_ipf1w]
predict latenz_merkel_2sdout, residuals

reg rohstein_2sdout basiszeit_2sdout [pw=wei_ipf1w]
predict latenz_stein_2sdout, residuals

bysort week: sum latenz_mip_2sdout

* Wochenweise & 3 Standardabweichungen
reg rohwbt_out basiszeit_out [pw=wei_ipf1w]
predict latenz_wbt_out, residuals

reg rohwabs_out basiszeit_out [pw=wei_ipf1w]
predict latenz_wabs_out, residuals

reg rohpid_out basiszeit_out [pw=wei_ipf1w]
predict latenz_pid_out, residuals

reg rohmip_out basiszeit_out [pw=wei_ipf1w]
predict latenz_mip_out, residuals

reg rohmerkel_out basiszeit_out [pw=wei_ipf1w]
predict latenz_merkel_out, residuals

reg rohstein_out basiszeit_out [pw=wei_ipf1w]
predict latenz_stein_out, residuals


* Tagesweise & 2 Standardabweichungen
reg rohwbt_2sddout basiszeit_2sddout [pw=wei_ipf1w]
predict latenz_wbt_2sddout, residuals

reg rohwabs_2sddout basiszeit_2sddout [pw=wei_ipf1w]
predict latenz_wabs_2sddout, residuals

reg rohpid_2sddout basiszeit_2sddout [pw=wei_ipf1w]
predict latenz_pid_2sddout, residuals

reg rohmip_2sddout basiszeit_2sddout [pw=wei_ipf1w]
predict latenz_mip_2sddout, residuals

reg rohmerkel_2sddout basiszeit_2sddout [pw=wei_ipf1w]
predict latenz_merkel_2sddout, residuals

reg rohstein_2sddout basiszeit_2sddout [pw=wei_ipf1w]
predict latenz_stein_2sddout, residuals

* Tagesweise & 3 Standardabweichungen
reg rohwbt_dout basiszeit_dout [pw=wei_ipf1w]
predict latenz_wbt_dout, residuals

reg rohwabs_dout basiszeit_dout [pw=wei_ipf1w]
predict latenz_wabs_dout, residuals

reg rohpid_dout basiszeit_dout [pw=wei_ipf1w]
predict latenz_pid_dout, residuals

reg rohmip_dout basiszeit_dout [pw=wei_ipf1w]
predict latenz_mip_dout, residuals

reg rohmerkel_dout basiszeit_dout [pw=wei_ipf1w]
predict latenz_merkel_dout, residuals

reg rohstein_dout basiszeit_dout [pw=wei_ipf1w]
predict latenz_stein_dout, residuals


*----------------------------------------------------------------
* Datensatz zum Zusammenf�gen mit anderen Jahren vorbereiten
*-----------------------------------------------------------------


keep lfdn wei_ipf1w week_count-rohstein ///
	basiszeit rohwbt_out-latenz_stein_dout
	
foreach var of varlist lfdn wei_ipf1w week_count-rohstein ///
	basiszeit rohwbt_out-latenz_stein_dout {
rename `var' `var'09
}

gen year = 2009

save "2009/2009.dta", replace













